# @Time    :2025/3/31 17:07
"""
1）用面向对象的思想，
假设你有汽车和摩托车不同的交通工具，
出行的时候，你可以选择喜爱的方式出行

设计思路
定义基类 Vehicle：作为所有交通工具的基类，包含一个通用的方法 travel()。
定义子类 Car 和 Motorcycle：继承自 Vehicle 类，并重写 travel() 方法以提供具体的出行行为。
创建一个 Travel 类：用于管理用户的出行选择，允许用户选择不同的交通工具进行出行。
"""


class Vehicle:
    def __init__(self, brand, model):
        self.__brand = brand
        self.__model = model

    def get_brand(self):
        return self.__brand

    def get_model(self):
        return self.__model


class Car(Vehicle):
    def __init__(self, brand, model, num_doors):
        # 调用父类的构造函数
        super().__init__(brand, model)
        self.num_doors = num_doors

    def start(self):
       return f"The {self.get_brand()} {self.get_model()} car with {self.num_doors} doors is starting."


class Motorcycle(Vehicle):
    def __init__(self, brand, model, has_sidecar):
        # 调用父类的构造函数
        super().__init__(brand, model)
        self.has_sidecar = has_sidecar

    def start(self):
        if self.has_sidecar:
            return f"The {self.get_brand()} {self.get_model()} motorcycle with a sidecar is starting."
        else:
            return f"The {self.get_brand()} {self.get_model()} motorcycle is starting."


def start_Vehicle(vehicle):
    # 多态：不同的子类对象调用start方法有不同的行为
    print(vehicle.start())


def main():
    car = Car("xiaomi", "su7", 4)
    moto1 = Motorcycle("HE", "SPORT", False)
    moto2 = Motorcycle("BWM", "R1200", True)
    # 掉用start_Vehicle函数
    start_Vehicle(car)
    start_Vehicle(moto1)
    start_Vehicle(moto2)


if __name__ == "__main__":
    main()
